Generalize signature verifier of tendermint client. #958
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
While implementing near-ibc, we found that the gas consumption of signature verification in tendermint client was high (about 9T gas for each) because it was using a pure rust implementation of the verifier (
tendermint::crypto::default::signature::Verifier
). In NEAR protocol, we can use a precompiled function to implement the ed25519 signature verification, which will only cost about 0.3T gas for each. So I made a change to the current tendermint client implementation, which enables a customized verifier of the tendermintClientState
. The verifier will be specified by the host implementation ofibc-rs
, rather than a default implementation inside tendermintClientState
.Of course I also made necessary changes to related code and tests.
This implementation had been included in the latest near-ibc implementation which reduced the gas consumption of signature verifications for about 96%. Obviously a big optimization for
near-ibc
.I think this is also worth to be checked in
ibc-rs
to see whether this change is good enough to be included in the following releases.